debian/rules: Move test script to an easier to maintain external file
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 8 Jul 2021 14:11:33 +0000 (16:11 +0200)
committerMarco Trevisan (Treviño) <marco@ubuntu.com>
Fri, 9 Jul 2021 14:02:45 +0000 (16:02 +0200)
We're doing lots of operations to run tests, it's better to have the
setup in an external script that it's easier to run, debug and maintain

debian/rules
debian/run-tests.sh [new file with mode: 0755]

index cd3aba497b56626635ac34727677c80742b9f7be..6913ea62d07485c49e1aa3f326e995c0c107f9d1 100755 (executable)
@@ -205,49 +205,10 @@ xfail_reftests = \
 #             gtk:gsk+gsk-compare+gsk-broadway+gsk-compare-broadway / broadway blend-difference
 # s390x: many (endianness?)
 override_dh_auto_test:
-       rm -f debian/tests-failed
-       set -e; for reftest in $(fuzzy_reftests); do \
-               cp debian/close-enough.keyfile \
-                       testsuite/reftests/$$reftest.keyfile; \
-       done
-       # So that gsettings can find the (uninstalled) gtk schemas
-       mkdir -p debian/build/glib-2.0/schemas/
-       cp gtk/org.gtk.* debian/build/glib-2.0/schemas/
-       glib-compile-schemas debian/build/glib-2.0/schemas/
-       # Remove LD_PRELOAD so we don't run with fakeroot, which makes dbus-related tests fail
-       env \
-               -u LD_PRELOAD \
-               GIO_MODULE_DIR=/nonexistent \
-               GIO_USE_VFS=local \
-               GIO_USE_VOLUME_MONITOR=unix \
-       dbus-run-session -- \
-       xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
-       debian/tests/run-with-locales \
-               --generate de_DE.UTF-8 \
-               --generate en_GB.UTF-8 \
-               --generate en_US.UTF-8 \
-               --generate sv_SE \
-               -- \
-       dh_auto_test \
-               --builddirectory=debian/build/deb \
-               -- \
-               --setup=x11 \
-               --timeout-multiplier $(test_timeout_multiplier) \
-       || touch debian/tests-failed
-       tail -v -n +0 debian/build/deb/meson-logs/testlog-x11.txt
-       # Don't base64-encode the image results for tests that upstream
-       # expect to fail
-       set -e; for reftest in $(xfail_reftests); do \
-               rm -f debian/build/deb/testsuite/reftests/output/x11/$$reftest.diff.png; \
-       done
-       # Put the rest in the log as base64 since we don't have an
-       # equivalent of AUTOPKGTEST_ARTIFACTS for buildds
-       debian/log-reftests.py
-       # Avoid incremental builds with -nc leaking settings into the next build
-       set -e; for reftest in $(fuzzy_reftests); do \
-               rm -f testsuite/reftests/$$reftest.keyfile; \
-       done
-       if test -e debian/tests-failed; then exit 1; fi
+       env BUILDDIR=debian/build/deb \
+               FUZZY_REFTESTS="$(fuzzy_reftests)" \
+               XFAIL_REFTESTS="$(xfail_reftests)" \
+                       debian/run-tests.sh -t $(test_timeout_multiplier)
 
 override_dh_auto_install:
        dh_auto_install --builddirectory=debian/build/deb --destdir=debian/install/deb
diff --git a/debian/run-tests.sh b/debian/run-tests.sh
new file mode 100755 (executable)
index 0000000..70df6d3
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+set -ex
+
+BUILDDIR=${BUILDDIR:-debian/build/deb}
+BACKEND=${BACKEND:-x11}
+
+FUZZY_REFTESTS=${FUZZY_REFTESTS:-}
+XFAIL_REFTESTS=${XFAIL_REFTESTS:-}
+
+test_data="$(mktemp -d -t debian-test-data-XXXXXXXX)"
+mkdir -p "$test_data"
+
+cleanup() {
+    rm -rf "$test_data"
+    rm -f "$BUILDDIR/meson-logs/testlog-$BACKEND.txt"
+
+    # Avoid incremental builds with -nc leaking settings into the next build
+    for reftest in $FUZZY_REFTESTS; do
+        rm -f "testsuite/reftests/$reftest.keyfile"
+    done
+}
+
+trap 'cleanup' EXIT INT
+
+if [ ! -d "$HOME" ]; then
+    export HOME="$test_data/home"
+    mkdir -p "$HOME"
+fi
+
+if [ ! -d "$XDG_RUNTIME_DIR" ]; then
+    export XDG_RUNTIME_DIR="$test_data/xdg-runtime"
+    mkdir -p "$XDG_RUNTIME_DIR"
+fi
+
+for reftest in $FUZZY_REFTESTS; do
+    cp debian/close-enough.keyfile "testsuite/reftests/$reftest.keyfile"
+done
+
+# So that gsettings can find the (uninstalled) gtk schemas
+mkdir -p "$test_data/glib-2.0/schemas/"
+cp gtk/org.gtk.* "$test_data/glib-2.0/schemas/"
+glib-compile-schemas "$test_data/glib-2.0/schemas/"
+
+# Remove LD_PRELOAD so we don't run with fakeroot, which makes dbus-related tests fail
+env \
+    -u LD_PRELOAD \
+    GIO_MODULE_DIR=/nonexistent \
+    GIO_USE_VFS=local \
+    GIO_USE_VOLUME_MONITOR=unix \
+    dbus-run-session -- \
+        xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
+            debian/tests/run-with-locales \
+                --generate de_DE.UTF-8 \
+                --generate en_GB.UTF-8 \
+                --generate en_US.UTF-8 \
+                --generate sv_SE \
+                -- \
+                    meson test -C "$BUILDDIR" \
+                    --setup="$BACKEND" \
+                    "$@" \
+        || touch "$test_data/tests-failed"
+
+tail -v -n +0 "$BUILDDIR/meson-logs/testlog-$BACKEND.txt" || true
+
+# Don't base64-encode the image results for tests that upstream
+# expect to fail
+for reftest in $XFAIL_REFTESTS; do
+    rm -f "$BUILDDIR/testsuite/reftests/output/$BACKEND/$reftest.diff.png"
+done
+
+# Put the rest in the log as base64 since we don't have an
+# equivalent of AUTOPKGTEST_ARTIFACTS for buildds
+debian/log-reftests.py
+
+[ -e "$test_data/tests-failed" ] && exit 1 || exit 0